@echo off
chcp 65001
title 使用NSSM安装云打印应用程序服务

:: 检查管理员权限
net session >nul 2>&1
if %errorlevel% neq 0 (
    echo 错误: 请以管理员身份运行此脚本!
    echo 请右键点击此批处理文件并选择"以管理员身份运行"。
    pause
    exit /b 1
)

:: 设置变量
set "SERVICE_NAME=CloudPrintAppSvc"
set "NSSM_URL=https://nssm.cc/release/nssm-2.24.zip"
set "NSSM_DIR=%~dp0tools\nssm"
set "NSSM_EXE=%NSSM_DIR%\nssm-2.24\win64\nssm.exe"
set "APP_EXE=%~dp0cloud_print_app.exe"

:: 检查应用程序是否存在
if not exist "%APP_EXE%" (
    if exist "%~dp0build\exe\cloud_print_app.exe" (
        set "APP_EXE=%~dp0build\exe\cloud_print_app.exe"
        echo 找到应用程序可执行文件: %APP_EXE%
    ) else (
        echo 错误: 未找到应用程序可执行文件!
        echo 请确保已成功构建应用程序。
        pause
        exit /b 1
    )
)

:: 创建tools目录
if not exist "%NSSM_DIR%" (
    mkdir "%NSSM_DIR%" 2>nul
)

:: 检查NSSM是否已下载
if not exist "%NSSM_EXE%" (
    echo NSSM工具未找到，请下载并解压NSSM到tools\nssm目录
    echo 下载地址: %NSSM_URL%
    echo.
    echo 提示: 您可以手动下载NSSM，并将nssm.exe复制到%NSSM_DIR%目录
    echo 或者运行以下PowerShell命令:
    echo.
    echo powershell -Command "& {Invoke-WebRequest -Uri '%NSSM_URL%' -OutFile '%NSSM_DIR%\nssm.zip'; Expand-Archive -Path '%NSSM_DIR%\nssm.zip' -DestinationPath '%NSSM_DIR%' -Force}"
    echo.
    pause
    exit /b 1
)

:: 停止并移除现有服务
echo 正在检查并移除现有服务(如果存在)...
"%NSSM_EXE%" stop %SERVICE_NAME% >nul 2>&1
"%NSSM_EXE%" remove %SERVICE_NAME% confirm >nul 2>&1

echo 正在安装云打印应用程序服务...
echo 使用应用程序: %APP_EXE%

:: 使用NSSM安装服务
"%NSSM_EXE%" install %SERVICE_NAME% "%APP_EXE%"
if %errorlevel% neq 0 (
    echo 错误: 安装服务失败
    pause
    exit /b 1
)

:: 配置服务
"%NSSM_EXE%" set %SERVICE_NAME% DisplayName "云打印应用程序服务"
"%NSSM_EXE%" set %SERVICE_NAME% Description "提供云打印应用程序的后台服务，支持Web界面访问"
"%NSSM_EXE%" set %SERVICE_NAME% AppDirectory "%~dp0"
"%NSSM_EXE%" set %SERVICE_NAME% Start SERVICE_AUTO_START

:: 设置日志
set "LOG_DIR=%~dp0logs"
if not exist "%LOG_DIR%" (
    mkdir "%LOG_DIR%" 2>nul
)
"%NSSM_EXE%" set %SERVICE_NAME% AppStdout "%LOG_DIR%\%SERVICE_NAME%_stdout.log"
"%NSSM_EXE%" set %SERVICE_NAME% AppStderr "%LOG_DIR%\%SERVICE_NAME%_stderr.log"

:: 启动服务
echo 正在启动服务...
"%NSSM_EXE%" start %SERVICE_NAME%
if %errorlevel% neq 0 (
    echo 警告: 服务启动失败，请手动启动服务或检查日志
) else (
    echo 服务已成功启动
)

echo.
echo 云打印应用程序服务已安装！
echo.
echo 服务名称: %SERVICE_NAME%
echo 服务状态: 已启动/已安装
echo 服务类型: 自动启动
echo 日志位置: %LOG_DIR%\%SERVICE_NAME%_*.log
echo.
echo 您可以通过以下命令管理服务:
echo   启动: sc start %SERVICE_NAME%
echo   停止: sc stop %SERVICE_NAME%
echo   状态: sc query %SERVICE_NAME%
echo.
pause 